home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xsw / psio.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  20KB  |  756 lines

  1. /*
  2.  *    @(#) psio.c 12.1 95/05/09 SCOINC
  3.  */
  4. /***************************************************************************
  5.  *
  6.  *    Copyright (c) 1990-1993        The Santa Cruz Operation, Inc.
  7.  *
  8.  *    All rights reserved.  No part of this program or publication may be
  9.  *    reproduced, transmitted, transcribed, stored in a retrieval system,
  10.  *    or translated into any language or computer language, in any form or
  11.  *    by any means, electronic, mechanical, magnetic, optical, chemical,
  12.  *    biological, or otherwise, without the prior written permission of:
  13.  *
  14.  *        The Santa Cruz Operation , Inc.        (408) 425-7222
  15.  *        400 Encinal St., Santa Cruz, California 95060 USA
  16.  *
  17.  **************************************************************************/
  18. /*
  19.  * Modification History
  20.  *
  21.  * S002, 15-Sep-93, rickra
  22.  *    If def'ed out some old code for now... Should remove it....
  23.  *    Lots of little bug fixes....
  24.  *
  25.  * S001, 27-May-93, rickra
  26.  *     Alot of stuff has been done.....
  27.  *
  28.  * S000, 30-Sep-92, rickra
  29.  *     Added copyright and modification history
  30.  *    Change hard coded color referneces to user configurable.
  31.  */
  32. /*+-------------------------------------------------------------------------
  33.     psio.c - XSW proc status detail
  34.  
  35.   Defined functions:
  36.     display_io_proc_stat(x,y,iproc)
  37.  
  38. --------------------------------------------------------------------------*/
  39.  
  40. #include <X11/Xlib.h>
  41. #include <X11/Xutil.h>
  42. #include <X11/Intrinsic.h>
  43. #include <X11/Shell.h>
  44. #include <X11/StringDefs.h>
  45. #include <Xm/Xm.h>
  46. #include <Xm/MainW.h>
  47. #include <Xm/DrawingA.h>
  48.  
  49. #include "include/unixincs.h"
  50. #include "include/resources.h"
  51. #include "include/xswboth.h"
  52. #include "include/buttons.h"
  53. #include "include/libkmem.h"
  54. #include "include/libmem.h"
  55. #include "include/libswap.h"
  56. #include "include/xsw.h"
  57. #include "include/psio.h"
  58.  
  59. extern struct NetworkXswStruct *current_server;
  60.  
  61. extern struct my_user_struct user;
  62. extern struct my_user_struct old_user;
  63.  
  64.  
  65. /*+-------------------------------------------------------------------------
  66.     ppproc_io_user_compare(ppp1,ppp2)
  67. --------------------------------------------------------------------------*/
  68. ppproc_io_user_compare (ppp1, ppp2)
  69.      struct my_proc_struct **ppp1;
  70.      struct my_proc_struct **ppp2;
  71. {
  72.  
  73.   if (((*ppp1) -> p_pid == 32767) && ((*ppp2) -> p_pid == 32767))
  74.     return (0);
  75.   else if ((*ppp1) -> p_pid == 32767)
  76.     return (1);
  77.   else if ((*ppp2) -> p_pid == 32767)
  78.     return (-1);
  79.  
  80.   if (current_server -> ps_io_sort_order == 1)
  81.     return (strcmp ((*ppp2) -> name, (*ppp1) -> name));
  82.   else
  83.     return (strcmp ((*ppp1) -> name, (*ppp2) -> name));
  84.  
  85. }                /* end of ppproc_io_user_compare */
  86.  
  87.  
  88.  
  89. /*+-------------------------------------------------------------------------
  90.     ppproc_io_pid_compare(ppp1,ppp2)
  91. --------------------------------------------------------------------------*/
  92. ppproc_io_pid_compare (ppp1, ppp2)
  93.      struct my_proc_struct **ppp1;
  94.      struct my_proc_struct **ppp2;
  95. {
  96.  
  97.   if (((*ppp1) -> p_pid == 32767) && ((*ppp2) -> p_pid == 32767))
  98.     return (0);
  99.   else if ((*ppp1) -> p_pid == 32767)
  100.     return (1);
  101.   else if ((*ppp2) -> p_pid == 32767)
  102.     return (-1);
  103.  
  104.   if (current_server -> ps_io_sort_order == 1)
  105.     return ((*ppp2) -> p_pid - (*ppp1) -> p_pid);
  106.   else
  107.     return ((*ppp1) -> p_pid - (*ppp2) -> p_pid);
  108.  
  109. }                /* end of ppproc_io_pid_compare */
  110.  
  111. /*+-------------------------------------------------------------------------
  112.     ppproc_io_cmd_compare(ppp1,ppp2)
  113. --------------------------------------------------------------------------*/
  114. ppproc_io_cmd_compare (ppp1, ppp2)
  115.      struct my_proc_struct **ppp1;
  116.      struct my_proc_struct **ppp2;
  117. {
  118.   struct my_user_struct user1;
  119.   struct my_user_struct user2;
  120.   int             i, j;
  121.  
  122.   i = get_user (&(**ppp1), &user1);
  123.  
  124.   j = get_user (&(**ppp2), &user2);
  125.  
  126.  
  127.   if (((*ppp1) -> p_pid == 32767) && ((*ppp2) -> p_pid == 32767))
  128.     return (0);
  129.   else if ((*ppp1) -> p_pid == 32767)
  130.     return (1);
  131.   else if ((*ppp2) -> p_pid == 32767)
  132.     return (-1);
  133.  
  134.   if (current_server -> ps_io_sort_order == 1)
  135.     return (strcmp (user2.u_psargs, user1.u_psargs));
  136.   else
  137.     return (strcmp (user1.u_psargs, user2.u_psargs));
  138.  
  139. }                /* end of ppproc_io_cmd_compare */
  140.  
  141. /*+-------------------------------------------------------------------------
  142.     ppproc_io_total_compare(ppp1,ppp2)
  143. --------------------------------------------------------------------------*/
  144. ppproc_io_total_compare (ppp1, ppp2)
  145.      struct my_proc_struct **ppp1;
  146.      struct my_proc_struct **ppp2;
  147. {
  148.   struct my_user_struct user1;
  149.   struct my_user_struct user2;
  150.   struct my_user_struct old_user1;
  151.   struct my_user_struct old_user2;
  152.   int             i, j, k, l;
  153.  
  154.   i = get_user (&(**ppp1), &user1);
  155.  
  156.   j = get_user (&(**ppp2), &user2);
  157.  
  158.   k = get_old_user (&(**ppp1), &old_user1);
  159.  
  160.   l = get_old_user (&(**ppp2), &old_user2);
  161.  
  162.  
  163.   if (((*ppp1) -> p_pid == 32767) && ((*ppp2) -> p_pid == 32767))
  164.     return (0);
  165.   else if (((*ppp1) -> p_pid == 32767) || (!i))
  166.     return (1);
  167.   else if (((*ppp2) -> p_pid == 32767) || (!j))
  168.     return (-1);
  169.  
  170.   if (current_server -> ps_io_sort_order == 1)
  171.     {
  172.       if (current_server -> ps_io_display_mode == 9)
  173.     return ((user2.u_iow + user2.u_ior) -
  174.         (user1.u_iow + user1.u_ior));
  175.       else
  176.     return (((user2.u_iow + user2.u_ior) -
  177.          (old_user2.u_iow + old_user2.u_ior)) -
  178.         ((user1.u_iow + user1.u_ior) -
  179.          (old_user1.u_iow + old_user1.u_ior)));
  180.     }
  181.   else
  182.     {
  183.       if (current_server -> ps_io_display_mode == 9)
  184.     return ((user1.u_iow + user1.u_ior) -
  185.         (user2.u_iow + user2.u_ior));
  186.       else
  187.     return (((user1.u_iow + user1.u_ior) -
  188.          (old_user1.u_iow + old_user1.u_ior)) -
  189.         ((user2.u_iow + user2.u_ior) -
  190.          (old_user2.u_iow + old_user2.u_ior)));
  191.     }
  192.  
  193.  
  194. }                /* end of ppproc_io_total_compare */
  195.  
  196. /*+-------------------------------------------------------------------------
  197.         ppproc_io_write_compare(ppp1,ppp2)
  198. --------------------------------------------------------------------------*/
  199. ppproc_io_write_compare (ppp1, ppp2)
  200.      struct my_proc_struct **ppp1;
  201.      struct my_proc_struct **ppp2;
  202. {
  203.   struct my_user_struct user1;
  204.   struct my_user_struct user2;
  205.   struct my_user_struct old_user1;
  206.   struct my_user_struct old_user2;
  207.   int             i, j, k, l;
  208.  
  209.   i = get_user (&(**ppp1), &user1);
  210.  
  211.   j = get_user (&(**ppp2), &user2);
  212.  
  213.   k = get_old_user (&(**ppp1), &old_user1);
  214.  
  215.   l = get_old_user (&(**ppp2), &old_user2);
  216.  
  217.  
  218.   if (((*ppp1) -> p_pid == 32767) && ((*ppp2) -> p_pid == 32767))
  219.     return (0);
  220.   else if (((*ppp1) -> p_pid == 32767) || (!i))
  221.     return (1);
  222.   else if (((*ppp2) -> p_pid == 32767) || (!j))
  223.     return (-1);
  224.  
  225.   if (current_server -> ps_io_sort_order == 1)
  226.     {
  227.       if (current_server -> ps_io_display_mode == 9)
  228.     return ((user2.u_iow) -
  229.         (user1.u_iow));
  230.       else
  231.     return (((user2.u_iow) -
  232.          (old_user2.u_iow)) -
  233.         ((user1.u_iow) -
  234.          (old_user1.u_iow)));
  235.     }
  236.   else
  237.     {
  238.       if (current_server -> ps_io_display_mode == 9)
  239.     return ((user1.u_iow) -
  240.         (user2.u_iow));
  241.       else
  242.     return (((user1.u_iow) -
  243.          (old_user1.u_iow)) -
  244.         ((user2.u_iow) -
  245.          (old_user2.u_iow)));
  246.  
  247.     }
  248.  
  249. }                /* end of ppproc_io_write_compare */
  250.  
  251. /*+-------------------------------------------------------------------------
  252.         ppproc_io_read_compare(ppp1,ppp2)
  253. --------------------------------------------------------------------------*/
  254. ppproc_io_read_compare (ppp1, ppp2)
  255.      struct my_proc_struct **ppp1;
  256.      struct my_proc_struct **ppp2;
  257. {
  258.   struct my_user_struct user1;
  259.   struct my_user_struct user2;
  260.   struct my_user_struct old_user1;
  261.   struct my_user_struct old_user2;
  262.   int             i, j, k, l;
  263.  
  264.   i = get_user (&(**ppp1), &user1);
  265.  
  266.   j = get_user (&(**ppp2), &user2);
  267.  
  268.   k = get_old_user (&(**ppp1), &old_user1);
  269.  
  270.   l = get_old_user (&(**ppp2), &old_user2);
  271.  
  272.  
  273.   if (((*ppp1) -> p_pid == 32767) && ((*ppp2) -> p_pid == 32767))
  274.     return (0);
  275.   else if (((*ppp1) -> p_pid == 32767) || (!i))
  276.     return (1);
  277.   else if (((*ppp2) -> p_pid == 32767) || (!j))
  278.     return (-1);
  279.  
  280.   if (current_server -> ps_io_sort_order == 1)
  281.     {
  282.       if (current_server -> ps_io_display_mode == 9)
  283.     return ((user2.u_ior) -
  284.         (user1.u_ior));
  285.       else
  286.     return (((user2.u_ior) -
  287.          (old_user2.u_ior)) -
  288.         ((user1.u_ior) -
  289.          (old_user1.u_ior)));
  290.     }
  291.   else
  292.     {
  293.       if (current_server -> ps_io_display_mode == 9)
  294.     return ((user1.u_ior) -
  295.         (user2.u_ior));
  296.       else
  297.     return (((user1.u_ior) -
  298.          (old_user1.u_ior)) -
  299.         ((user2.u_ior) -
  300.          (old_user2.u_ior)));
  301.  
  302.     }
  303.  
  304. }                /* end of ppproc_io_read_compare */
  305.  
  306.  
  307. /*+-------------------------------------------------------------------------
  308.         ppproc_io_swap_compare(ppp1,ppp2)
  309. --------------------------------------------------------------------------*/
  310. ppproc_io_swap_compare (ppp1, ppp2)
  311.      struct my_proc_struct **ppp1;
  312.      struct my_proc_struct **ppp2;
  313. {
  314.   struct my_user_struct user1;
  315.   struct my_user_struct user2;
  316.   struct my_user_struct old_user1;
  317.   struct my_user_struct old_user2;
  318.   int             i, j, k, l;
  319.  
  320.   i = get_user (&(**ppp1), &user1);
  321.  
  322.   j = get_user (&(**ppp2), &user2);
  323.  
  324.   k = get_old_user (&(**ppp1), &old_user1);
  325.  
  326.   l = get_old_user (&(**ppp2), &old_user2);
  327.  
  328.  
  329.   if (((*ppp1) -> p_pid == 32767) && ((*ppp2) -> p_pid == 32767))
  330.     return (0);
  331.   else if (((*ppp1) -> p_pid == 32767) || (!i))
  332.     return (1);
  333.   else if (((*ppp2) -> p_pid == 32767) || (!j))
  334.     return (-1);
  335.  
  336.   if (current_server -> ps_io_sort_order == 1)
  337.     {
  338.       if (current_server -> ps_io_display_mode == 9)
  339.     return ((user2.u_iosw) -
  340.         (user1.u_iosw));
  341.       else
  342.     return (((user2.u_iosw) -
  343.          (old_user2.u_iosw)) -
  344.         ((user1.u_iosw) -
  345.          (old_user1.u_iosw)));
  346.     }
  347.   else
  348.     {
  349.       if (current_server -> ps_io_display_mode == 9)
  350.     return ((user1.u_iosw) -
  351.         (user2.u_iosw));
  352.       else
  353.     return (((user1.u_iosw) -
  354.          (old_user1.u_iosw)) -
  355.         ((user2.u_iosw) -
  356.          (old_user2.u_iosw)));
  357.  
  358.     }
  359.  
  360. }                /* end of ppproc_io_swap_compare */
  361.  
  362.  
  363. /*+-------------------------------------------------------------------------
  364.         ppproc_io_char_compare(ppp1,ppp2)
  365. --------------------------------------------------------------------------*/
  366. ppproc_io_char_compare (ppp1, ppp2)
  367.      struct my_proc_struct **ppp1;
  368.      struct my_proc_struct **ppp2;
  369. {
  370.   struct my_user_struct user1;
  371.   struct my_user_struct user2;
  372.   struct my_user_struct old_user1;
  373.   struct my_user_struct old_user2;
  374.   int             i, j, k, l;
  375.  
  376.   i = get_user (&(**ppp1), &user1);
  377.  
  378.   j = get_user (&(**ppp2), &user2);
  379.  
  380.   k = get_old_user (&(**ppp1), &old_user1);
  381.  
  382.   l = get_old_user (&(**ppp2), &old_user2);
  383.  
  384.  
  385.   if (((*ppp1) -> p_pid == 32767) && ((*ppp2) -> p_pid == 32767))
  386.     return (0);
  387.   else if (((*ppp1) -> p_pid == 32767) || (!i))
  388.     return (1);
  389.   else if (((*ppp2) -> p_pid == 32767) || (!j))
  390.     return (-1);
  391.  
  392.   if (current_server -> ps_io_sort_order == 1)
  393.     {
  394.       if (current_server -> ps_io_display_mode == 9)
  395.     return ((user2.u_ioch) -
  396.         (user1.u_ioch));
  397.       else
  398.     return (((user2.u_ioch) -
  399.          (old_user2.u_ioch)) -
  400.         ((user1.u_ioch) -
  401.          (old_user1.u_ioch)));
  402.     }
  403.   else
  404.     {
  405.       if (current_server -> ps_io_display_mode == 9)
  406.     return ((user1.u_ioch) -
  407.         (user2.u_ioch));
  408.       else
  409.     return (((user1.u_ioch) -
  410.          (old_user1.u_ioch)) -
  411.         ((user2.u_ioch) -
  412.          (old_user2.u_ioch)));
  413.  
  414.     }
  415.  
  416. }                /* end of ppproc_io_char_compare */
  417.  
  418.  
  419. /*+-------------------------------------------------------------------------
  420.     display_io_proc_stat(x,y,iproc)
  421. 00000000001111111111222222222233333333334444444444555555555566666666667777777777
  422. 01234567890123456789012345678901234567890123456789012345678901234567890123456789
  423.       USER   PID  CPU PRI NI  UCPU   SCPU  SIZE TTY CMD
  424. #!########X ##### ### ### ## ###### ###### #### ### ########
  425. --------------------------------------------------------------------------*/
  426. void
  427. display_io_proc_stat (window, display, gc, pixmap, x, y, iproc)
  428.      Window          window;
  429.      Display        *display;
  430.      GC              gc;
  431.      Pixmap          pixmap;
  432.      int             x;
  433.      int             y;
  434.      register int    iproc;
  435. {
  436.   int             x2 = x;
  437.   register int    positioned = 0;
  438.   register struct my_proc_struct *tproc = current_server -> pprocs[iproc];
  439.   struct my_proc_struct *oproc = current_server -> poldprocs[iproc];
  440.   int             got_user;
  441.   int             got_old_user;
  442.   char           *p_stat_str = " sRzdipx";    /* dependent on values of
  443.                          * SSLEEP etc */
  444.   char           *cptr;
  445.   char            s80[80];
  446.   int             fwidth = FWIDTH;
  447.   unsigned long   pixel;
  448.  
  449.   struct ps_io_pixel_struct *pixel_list = NULL;
  450.  
  451.  
  452.   pixel_list = (struct ps_io_pixel_struct *)
  453.     calloc (1, sizeof (struct ps_io_pixel_struct));
  454.  
  455.   pixel = colorPSioIdle.pixel;
  456.  
  457.   got_user = get_user (tproc, &user);
  458.  
  459. /*
  460.  * Clear the line.....
  461.  */
  462.  
  463.   XSetForeground (display, gc, background);
  464.   XFillRectangle (display, pixmap, gc,0, y,
  465.           current_server -> SEPERATE_WINDOWS_LIST[BUTTON_ps_io].draw_width,
  466.                   FHEIGHT);
  467.  
  468.  
  469.   if (got_user)
  470.     {
  471.       if (got_old_user = get_old_user (tproc, &old_user))
  472.     {
  473.  
  474.       if (old_user.u_iosw != user.u_iosw)
  475.         pixel_list -> iosw_pixel = colorPSioActive.pixel;
  476.       else
  477.         pixel_list -> iosw_pixel = pixel;
  478.  
  479.       if (old_user.u_ioch != user.u_ioch)
  480.         pixel_list -> ioch_pixel = colorPSioActive.pixel;
  481.       else
  482.         pixel_list -> ioch_pixel = pixel;
  483.  
  484.       if (old_user.u_ior != user.u_ior)
  485.         pixel_list -> ior_pixel = colorPSioActive.pixel;
  486.       else
  487.         pixel_list -> ior_pixel = pixel;
  488.  
  489.       if (old_user.u_iow != user.u_iow)
  490.         pixel_list -> iow_pixel = colorPSioActive.pixel;
  491.       else
  492.         pixel_list -> iow_pixel = pixel;
  493.  
  494.       if ((old_user.u_iow + old_user.u_ior) !=
  495.           (user.u_iow + user.u_ior))
  496.         pixel_list -> total_pixel = colorPSioActive.pixel;
  497.       else
  498.         pixel_list -> total_pixel = pixel;
  499.  
  500.     }
  501.       else
  502.     {
  503.       pixel = colorPSioNew.pixel;
  504.       pixel_list -> iosw_pixel = pixel;
  505.       pixel_list -> ioch_pixel = pixel;
  506.       pixel_list -> ior_pixel = pixel;
  507.       pixel_list -> iow_pixel = pixel;
  508.       pixel_list -> total_pixel = pixel;
  509.  
  510.     }
  511.  
  512.     }
  513.  
  514.  
  515. /*
  516.   pixel = colorPSioIdle.pixel;
  517.  
  518.   got_user = get_user (tproc, &user);
  519.  
  520.   if (got_user)
  521.     {
  522.       if (got_old_user = get_old_user (tproc, &old_user))
  523.     {
  524.       if ((old_user.u_iow + old_user.u_ior) !=
  525.           (user.u_iow + user.u_ior))
  526.         pixel = colorPSioActive.pixel;
  527.     }
  528.       else
  529.     pixel = colorPSioNew.pixel;
  530.  
  531.     }
  532. */
  533.  
  534.  
  535.   (void) sprintf (s80, "%-8s ", tproc -> name);
  536.  
  537.   x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y, pixmap, pixel, s80);
  538.   s80[0] = (tproc -> p_uid != tproc -> p_suid) ? '#' : ' ';
  539.   s80[1] = ' ';
  540.   s80[2] = 0;
  541.   x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y, pixmap, pixel, s80);
  542.  
  543.   (void) sprintf (s80, "%6d ", tproc -> p_pid);
  544.   x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y, pixmap, pixel, s80);
  545.  
  546.   if (got_user)
  547.     {
  548.  
  549.       if (current_server -> ps_io_display_mode == 9)
  550.     {
  551.  
  552.       (void) sprintf (s80, "%6d ",
  553.               user.u_iosw);
  554.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  555.                 pixmap, pixel_list -> iosw_pixel, s80);
  556.  
  557.       (void) sprintf (s80, "%12d ",
  558.               user.u_ioch);
  559.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  560.                 pixmap, pixel_list -> ioch_pixel, s80);
  561.  
  562.       (void) sprintf (s80, "%6d ",
  563.               user.u_ior);
  564.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  565.                 pixmap, pixel_list -> ior_pixel, s80);
  566.  
  567.       (void) sprintf (s80, "%6d ",
  568.               user.u_iow);
  569.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  570.                 pixmap, pixel_list -> iow_pixel, s80);
  571.  
  572.       (void) sprintf (s80, "%8d ",
  573.               (user.u_iow + user.u_ior));
  574.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  575.                 pixmap, pixel_list -> total_pixel, s80);
  576.  
  577.     }
  578.       else
  579.     {
  580.  
  581.       (void) sprintf (s80, "%6d ",
  582.               user.u_iosw - old_user.u_iosw);
  583.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  584.                 pixmap, pixel_list -> iosw_pixel, s80);
  585.  
  586.       (void) sprintf (s80, "%12d ",
  587.               user.u_ioch - old_user.u_ioch);
  588.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  589.                 pixmap, pixel_list -> ioch_pixel, s80);
  590.  
  591.       (void) sprintf (s80, "%6d ",
  592.               user.u_ior - old_user.u_ior);
  593.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  594.                 pixmap, pixel_list -> ior_pixel, s80);
  595.  
  596.       (void) sprintf (s80, "%6d ",
  597.               user.u_iow - old_user.u_iow);
  598.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  599.                 pixmap, pixel_list -> iow_pixel, s80);
  600.  
  601.       (void) sprintf (s80, "%8d ",
  602.          (user.u_iow + user.u_ior) - (old_user.u_iow + old_user.u_ior));
  603.       x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y,
  604.                 pixmap, pixel_list -> total_pixel, s80);
  605.  
  606.     }
  607.  
  608.     }
  609.   else
  610.     x2 += disp_info_text (window, display, gc, DrawAreaXYWH, x2, y, pixmap, pixel, "------ ------------ ------ ------ -------- ");
  611.  
  612. /*
  613.       XClearArea (display, window, x2, y, DrawAreaXYWH.width - x2, FHEIGHT, 0);
  614. */
  615.   XSetForeground (display, gc, background);
  616.   XFillRectangle (display, pixmap, gc, x2, y,
  617.        current_server -> SEPERATE_WINDOWS_LIST[BUTTON_ps_io].width - x2,
  618.           FHEIGHT);
  619.  
  620.  
  621.   XSetForeground (display, gc, pixel);
  622.   if (got_user)
  623.     {
  624. /*
  625.       XDrawString (display, window, gc, x2, y + FASCENT,
  626. */
  627.       XDrawString (display, pixmap, gc, x2, y + FASCENT,
  628.            user.u_psargs, strlen (user.u_psargs));
  629.     }
  630.   else
  631.     {
  632.       switch (tproc -> p_stat)
  633.     {
  634.     case SZOMB:
  635.       cptr = "<zombie>";
  636.       break;
  637.     case SXBRK:
  638.       cptr = "<xbreak>";
  639.       break;
  640.     case SIDL:
  641.       cptr = "<in creation>";
  642.       break;
  643.     default:
  644.       cptr = "<swap in progress>";
  645.     }
  646. /*
  647.       XDrawString (display, window, gc, x2, y + FASCENT, cptr, strlen (cptr));
  648. */
  649.       XDrawString (display, pixmap, gc, x2, y + FASCENT, cptr, strlen (cptr));
  650.     }
  651.  
  652.  
  653.   free (pixel_list);
  654.  
  655. }                /* end of display_io_proc_stat */
  656.  
  657. /*+-------------------------------------------------------------------------
  658.     update_ps_io(SP)
  659. --------------------------------------------------------------------------*/
  660. void
  661. update_ps_io (SP)
  662.  
  663.      struct NetworkXswStruct *SP;
  664.  
  665. {
  666.   Window          window = SP -> SEPERATE_WINDOWS_LIST[BUTTON_ps_io].window;
  667.   Display        *display = SP -> SEPERATE_WINDOWS_LIST[BUTTON_ps_io].display;
  668.   GC              gc = SP -> SEPERATE_WINDOWS_LIST[BUTTON_ps_io].gc;
  669.   Pixmap          pixmap = SP -> SEPERATE_WINDOWS_LIST[BUTTON_ps_io].pixmap;
  670.  
  671.   int             x = 0;
  672.   int             y = 0;
  673.  
  674.   int             ps_procs_to_disp;
  675.   int             button_num;
  676.  
  677.   register int    iproc;
  678.   int             fheight = FHEIGHT;
  679.   int             i;
  680.   int             current_ps_number = 0;
  681.   int             got_user;
  682.   int             got_old_user;
  683.  
  684.   struct my_proc_struct *tproc;
  685.  
  686.  
  687.   sort_procs (BUTTON_ps_io);
  688.  
  689.   y = 0;
  690.  
  691.   if (SP -> ps_io_display_mode == 9)
  692.     {
  693.       for (iproc = 0; iproc < SP -> nprocs; iproc++)
  694.     {
  695.       display_io_proc_stat (window, display, gc, pixmap,
  696.                 x, y + (iproc * fheight),
  697.                 iproc);
  698.     }
  699.       y += (iproc * fheight);
  700.     }
  701.   else
  702.     {
  703.  
  704.       current_ps_number = 0;
  705.  
  706.       for (iproc = 0; iproc < SP -> nprocs; iproc++)
  707.     {
  708.  
  709.       tproc = SP -> pprocs[iproc];
  710.       got_user = get_user (tproc, &user);
  711.  
  712.       if (got_user)
  713.         {
  714.           if (got_old_user = get_old_user (tproc, &old_user))
  715.         {
  716.           if (got_old_user)
  717.             {
  718.               if ((((old_user.u_ior + old_user.u_iow) !=
  719.                 (user.u_ior + user.u_iow)) &&
  720.                ((user.u_ior - old_user.u_ior) >= 0) &&
  721.                ((user.u_iow - old_user.u_iow) >= 0)) ||
  722.               (old_user.u_ioch != user.u_ioch)
  723.  
  724.  
  725.             )
  726.             {
  727.  
  728.               display_io_proc_stat (window, display, gc, pixmap,
  729.                         x,
  730.                       y + (current_ps_number * fheight),
  731.                         iproc);
  732.               current_ps_number++;
  733.             }
  734.             }
  735.  
  736.  
  737.         }
  738.         }
  739.  
  740.  
  741.     }
  742.       y += (current_ps_number * fheight);
  743.  
  744.  
  745.     }
  746.   XSetForeground (display, gc, background);
  747.   XFillRectangle (display, pixmap, gc,
  748.           x, y,
  749.           SP -> SEPERATE_WINDOWS_LIST[BUTTON_ps_io].draw_width,
  750.               SP -> SEPERATE_WINDOWS_LIST[BUTTON_ps_io].draw_height);
  751.  
  752. }                /* end of update_ps_io */
  753.  
  754. /* vi: set tabstop=4 shiftwidth=4: */
  755. /* end of psio.c */
  756.